home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / src / compiler / Primdec.sml < prev    next >
Encoding:
Text File  |  1997-08-18  |  3.0 KB  |  109 lines  |  [TEXT/R*ch]

  1. (* Concrete syntax for primitive declarations *)
  2.  
  3. local
  4.   open Const Prim Smlprim;
  5.  
  6. val primitive_names = 
  7. [
  8.   ("identity", Pidentity),
  9.   ("field0", Pfield 0),
  10.   ("field1", Pfield 1),
  11.   ("field2", Pfield 2),
  12.   ("field3", Pfield 3),
  13.   ("field4", Pfield 4),
  14.   ("field5", Pfield 5),
  15.   ("field6", Pfield 6),
  16.   ("field7", Pfield 7),
  17.   ("field8", Pfield 8),
  18.   ("field9", Pfield 9),
  19.   ("field10", Pfield 10),
  20.   ("field11", Pfield 11),
  21.   ("field12", Pfield 12),
  22.   ("setfield0", Psetfield 0),
  23.   ("setfield1", Psetfield 1),
  24.   ("setfield2", Psetfield 2),
  25.   ("setfield3", Psetfield 3),
  26.   ("setfield4", Psetfield 4),
  27.   ("setfield5", Psetfield 5),
  28.   ("setfield6", Psetfield 6),
  29.   ("setfield7", Psetfield 7),
  30.   ("setfield8", Psetfield 8),
  31.   ("setfield9", Psetfield 9),
  32.   ("setfield10", Psetfield 10),
  33.   ("setfield11", Psetfield 11),
  34.   ("setfield12", Psetfield 12),
  35.   ("update", Pupdate),
  36.   ("tag_of", Ptag_of),
  37.   ("raise", Praise),
  38.   ("not", Pnot),
  39.   ("succ", Psmlsuccint),
  40.   ("pred", Psmlpredint),
  41.   ("~int", Psmlnegint),
  42.   ("+int", Psmladdint),
  43.   ("-int", Psmlsubint),
  44.   ("*int", Psmlmulint),
  45.   ("div", Psmldivint),
  46.   ("mod", Psmlmodint),
  47.   ("and", Pandint),
  48.   ("or", Porint),
  49.   ("xor", Pxorint),
  50.   ("shift_left", Pshiftleftint),
  51.   ("shift_right_signed", Pshiftrightintsigned),
  52.   ("shift_right_unsigned", Pshiftrightintunsigned),
  53.   ("int_of_float", Pintoffloat),
  54.   ("real_of_int", Pfloatprim Pfloatofint),
  55.   ("~real", Pfloatprim Psmlnegfloat),
  56.   ("+real", Pfloatprim Psmladdfloat),
  57.   ("-real", Pfloatprim Psmlsubfloat),
  58.   ("*real", Pfloatprim Psmlmulfloat),
  59.   ("/", Pfloatprim Psmldivfloat),
  60.   ("string_length", Pstringlength),
  61.   ("get_nth_char", Pgetstringchar),
  62.   ("set_nth_char", Psetstringchar),
  63.   ("make_vect", Pmakevector),
  64.   ("vect_length", Pvectlength),
  65.   ("get_vect_item", Pgetvectitem),
  66.   ("set_vect_item", Psetvectitem),
  67.   ("==", Ptest Peq_test),
  68.   ("!=", Ptest Pnoteq_test),
  69.   ("=int", Ptest (Pint_test PTeq)),
  70.   ("<>int", Ptest (Pint_test PTnoteq)),
  71.   ("<int", Ptest (Pint_test PTlt)),
  72.   (">int", Ptest (Pint_test PTgt)),
  73.   ("<=int", Ptest (Pint_test PTle)),
  74.   (">=int", Ptest (Pint_test PTge)),
  75.   ("=real", Ptest (Pfloat_test PTeq)),
  76.   ("<>real", Ptest (Pfloat_test PTnoteq)),
  77.   ("<real", Ptest (Pfloat_test PTlt)),
  78.   (">real", Ptest (Pfloat_test PTgt)),
  79.   ("<=real", Ptest (Pfloat_test PTle)),
  80.   (">=real", Ptest (Pfloat_test PTge)),
  81.   ("=string", Ptest (Pstring_test PTeq)),
  82.   ("<>string", Ptest (Pstring_test PTnoteq)),
  83.   ("<string", Ptest (Pstring_test PTlt)),
  84.   (">string", Ptest (Pstring_test PTgt)),
  85.   ("<=string", Ptest (Pstring_test PTle)),
  86.   (">=string", Ptest (Pstring_test PTge)),
  87.   ("make_ref_vect", Pmakerefvector),
  88.   ("+intunsig", Paddint),
  89.   ("-intunsig", Psubint),
  90.   ("*intunsig", Pmulint),
  91.   ("divunsig", Pdivint),
  92.   ("modunsig", Pmodint),
  93.   ("quot", Psmlquotint),
  94.   ("rem", Psmlremint)
  95. ];
  96.  
  97. in
  98.  
  99. fun findPrimitive arity name =
  100.   if arity = 0 then
  101.     MLPgv { qual="(global)", id=name }
  102.   else
  103.     (MLPprim(arity, Fnlib.lookup name primitive_names)
  104.      handle Subscript =>
  105.        MLPccall(arity, name))
  106. ;
  107.  
  108. end;
  109.